#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 1000
#define ElemType int
// 静态链表
typedef struct 
{
	ElemType data;
	int cur;
}component,SLinkList[MAXSIZE];

// 构造一个静态链表
void InitSpace_SL(SLinkList &Space);
int Malloc_SL(SLinkList &Space);
void Free_SL(SLinkList &Space,int k);
void difference(SLinkList &Space,int &S);

// 构造一个静态链表
void InitSpace_SL(SLinkList &Space){
	int i;
	for(i = 0;i < MAXSIZE-1;i++){
		Space[i].cur = i+1;
	}
	Space[MAXSIZE-1].cur=0;
}

// 返回一个可以赋值的新节点的游标
// 返回头结点所指向的游标，如果游标为0，即出错
// 如果该游标分配成功，则头结点指向的分配节点的下一个节点
int Malloc_SL(SLinkList &Space){
	int i = Space[0].cur;
	if(i)Space[0].cur = Space[i].cur;
	return i;
}

// 释放Space的游标为k的节点
void Free_SL(SLinkList &Space,int k){
	// 游标为k的下一个游标为头结点下个游标
	// 把游标为k的结点放到头结点(备用链表)
	Space[k].cur = Space[0].cur;
	Space[0].cur = k;
}

void difference(SLinkList &Space,int &S){
	int r,p;//r上一个节点,p位当前节点
	int m,n;//元素的个数
	int b,i,j;
	InitSpace_SL(Space);
	S = Malloc_SL(Space);
	r = S;
	scanf("%d%d",&m,&n);
	for(j=0;j<m;j++){
		i = Malloc_SL(Space);
		scanf("%d",&Space[i].data);
		Space[r].cur = i;
		r = i;
	}
	Space[r] = 0;
	for (j=0;j<n;j++)
	{
		scanf("%d",&b);
		p = S;
		k = Space[S].cur;
		while(k != Space[r].cur && Space[k].data != b){
			p = k;
			k = Space[k].cur;
		}
		if(Space[r].cur == k){
			i = Malloc_SL(Space);
			Space[i].data = b;
			Space[i].cur = Space[r].cur;
			Space[r].cur = i;
		}else{
			Space[p].cur = Space[k].cur;
			Free_SL(Space,k);
			if(k==r) r=p;
		}
	}
}
void InitSpace_SL(SLinkList &space){
	int i;
	for (i=0;i<MAXSIZE-1;++i)
	{
		space[i]=i+1;
	}
	space[MAXSIZE-1]=0;
}
int Malloc_SL(SLinkList &space){
	int i;
	i = space[0].cur;
	if(space[0].cur) space[0].cur = space[i].cur;//指间下一个要分配的空间
	return i;
}
void Free_SL(SLinkList &space,int k){
	// 把k下一个指向空间为本来头结点的指向空间
	// 即分配完k之后下一个分配的是完本头结点分配指向的空间
	space[k].cur = space[0].cur;
	// 头结点指向释放的k位置
	space[0].cur = k;
}
// 计算(A-B)U(B-A)
void difference(SLinkList &space,int &S){
	int r;
	int m,n;
	int i,j;
	int b;
	InitSpace_SL(space);
	// 记录已分配空间的头结点
	S = Malloc_SL(space);
	// 记录上一个结点
	r=S;
	// 输入A,B的个数
	scanf("%d%d",&m,&n);
	// 依次输入A的结点
	for(i=0;i<m;i++){
		k = Malloc_SL(space);
		scanf("%d",space[k].data);
		// 上一个节点指向当前分配结点的位置
		space[r].cur = k;
		r = k;
	}
	space[r].cur = 0;
	for(i=0;i<n;i++){
		scanf("%d",&j);
		p = S;
		k = space[S].cur;
		while(k != space[r].cur && space[k].data!=j){
			p = k;
			k = space[k].cur;
		}
		if(k==space[r].cur){
			b = Malloc_SL(space);
			space[b].data = j;
			space[b].cur = space[r].cur;
			space[r].cur = i;
		}else{
			space[p].cur = space[k].cur;
			Free_SL(space,k);
			if(k==r) r=p;
		}
	}
}